package com.yyh;

import java.util.Arrays;

/*定义一个专门操作数组的工具类的抽象类
--查询数组中所有元素的抽象方法
--查询元素在数组中位置的抽象方法*/
public class Abstract2 {
    public static void main(String[] args) {
        ArrayUtil arrayUtil = new ArrayUtilImpl();
        int[] arr = {1,2,3,4,5,6,7,8,9,10};
        arrayUtil.show(arr);
        System.out.println(arrayUtil.search(arr, 5));
        System.out.println(Arrays.toString(arrayUtil.reverse(arr)));
        System.out.println(Arrays.toString(arrayUtil.delete(arr, 5)));
        System.out.println(Arrays.toString(arrayUtil.add(arr, 5, 100)));
        System.out.println(arrayUtil.isFull(arr));

    }
}
//定义一个专门操作数组的工具类的抽象类
abstract class ArrayUtil {
    //查询数组中所有元素的抽象方法
    public abstract void show(int[] arr);
    //查询元素在数组中位置的抽象方法
    public abstract int search(int[] arr, int key);
    //数组反转之后返回的抽象方法
    public abstract int[] reverse(int[] arr);
    //删除数组中指定索引位置元素的抽象方法
    public abstract int[] delete(int[] arr, int index);
    //向数组指定索引位置添加元素的抽象方法
    public abstract int[] add(int[] arr, int index, int data);
    //判断数组中元素是否存满的抽象方法
    public abstract boolean isFull(int[] arr);
}
class ArrayUtilImpl extends ArrayUtil {
    @Override
    public void show(int[] arr) {
        for(int i=0; i<arr.length; i++){
            System.out.print(arr[i] + " ");
        }
        System.out.println();
    }
    @Override
    public int search(int[] arr, int key) {
        for(int i=0; i<arr.length; i++){
            if(arr[i] == key){
                return i;
            }
        }
        return -1;
    }
    @Override
    public int[] reverse(int[] arr) {
        int[] newArr = new int[arr.length];
        for(int i=0; i<arr.length; i++){
            newArr[i] = arr[arr.length-1-i];
        }
        return newArr;
    }
    @Override
    public int[] delete(int[] arr, int index) {
        if(index < 0 || index >= arr.length){
            return arr;
        }
        int[] newArr = new int[arr.length-1];
        for(int i=0; i<index; i++){
            newArr[i] = arr[i];
        }
        for(int i=index; i<newArr.length; i++){
            newArr[i] = arr[i+1];
        }
        return newArr;
    }
    @Override
    public int[] add(int[] arr, int index, int data) {
        if(index < 0 || index > arr.length){
            return arr;
        }
        int[] newArr = new int[arr.length+1];
        for(int i=0; i<index; i++){
            newArr[i] = arr[i];
        }
        newArr[index] = data;
        for(int i=index; i<newArr.length-1; i++){
            newArr[i+1] = arr[i];
        }
        return newArr;
    }
    @Override
    public boolean isFull(int[] arr) {
        return arr.length == 10;
    }
}

